package com.yc.Matrix.row;

import java.util.ArrayList;
import java.util.List;

/***
 * 并行第二版 结果矩阵中的每一行一个任务
 */
public class ParallelRowMultipiler {
    public static void multiply(double[][] matrix1,double[][] matrix2,double[][] result){
        List<Thread> threads=new ArrayList<Thread>();

        int rows1=matrix1.length;         //第一个矩阵的行
        int column1=matrix1[0].length;    //第一个矩阵的列

        int rows2=matrix2.length;         //第二个矩阵的行
        int column2=matrix2[0].length;    //第二个矩阵的列

        for(int i=0;i<rows1;i++){
                // 总共2000个线程
                //创建 线程
                Thread t=new Thread(new RowMultipilerTask(result,matrix1,matrix2,i));
                t.start();

                threads.add(t);
                if(threads.size()%10==0){  //每10个线程运行一次 分批运行
                    waitForThread(threads);
                }
        }

    }
    private static void waitForThread(List<Thread> threads){
        for(Thread t:threads){
            try {
                t.join(); //t先运行 其他的线程等待
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
        }
    }
}
